package com.hwg.shiliupro.controller;

import com.hwg.shiliupro.annotation.Authority;
import com.hwg.shiliupro.dto.FlagDto;
import com.hwg.shiliupro.dto.PageBean;
import com.hwg.shiliupro.dto.WorkQueryDto;
import com.hwg.shiliupro.dto.WorkVo;
import com.hwg.shiliupro.finals.Code;
import com.hwg.shiliupro.po.R;
import com.hwg.shiliupro.po.Work;
import com.hwg.shiliupro.service.WorkService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

@Slf4j
@RestController
@RequestMapping("/api/works")
public class WorkController {
    @Autowired
    private WorkService workService;


    /**
     * 分页查询自己的任务
     *
     * @return {@link R}
     */
    @PostMapping
    @Authority("work:getByUId")
    public R getWorkByUId(@RequestBody Map map){
        Integer uId = (Integer) map.get("uId");
        Integer page = (Integer) map.get("page");
        Integer size  = (Integer) map.get("size");
        WorkQueryDto workQueryDto = new WorkQueryDto(uId,page,size);
        log.info("分页查询自己的任务:{}",workQueryDto);
        PageBean<Work> pageWork = workService.selectByPage(workQueryDto);
        log.info("返回给前端的pageBeanWork：{}",pageWork);
        return R.ok().code(Code.GET_OK).data(pageWork);
    }

    /**
     * 得到所有的任务
     *
     * @return {@link R}
     */
    @GetMapping("/all")
    @Authority("work:getAll")
    public R getAll(){
        List<WorkVo> all = workService.getAll();
        log.info("得到WorkVo：{}",all);
        return R.ok().code(Code.GET_OK).data(all);
    }

    /**
     * 新增任务
     *
     * @param map 工作
     * @return {@link R}
     */
    @PostMapping("/insert")
    @Authority("work:insert")
    public R insertWork(@RequestBody Map map){
        log.info("前端传的新增map：{}",map);
        Integer uId = (Integer) map.get("uId");
        String workName = (String) map.get("workName");
        String workContent = (String) map.get("workContent");
        Work work = new Work(workName,workContent,uId);
//        log.info("前端传的新增work：{}",work);
        if(workService.insert(work)){
            return R.ok().code(Code.SAVE_OK);
        }
        return R.ok().code(Code.SAVE_ERR).message("新增任务失败~请稍后再试");
    }


    /**
     * 管理员审核是否通过任务
     *  由于出现 415 请求的请求头Content-Type不为application/json  第二个参数不能直接接收  改成前端以json格式发送flag
     * @param id id
     * @return {@link R}
     */
    @PutMapping("/{id}")
    @Authority("work:check")
    public R checkWork(@PathVariable Integer id, @RequestBody FlagDto flag){
        if(workService.ischeck(id,flag.getFlag())){
            return R.ok().code(Code.UPDATE_OK);
        }
        return R.error().code(Code.UPDATE_ERR).message("审核失败~请稍后再试");
    }

    /**
     * 用户确认完成/未完成任务
     *
     * @param id  id
     * @param map 地图
     * @return {@link R}
     */
    @PutMapping("isfinish/{id}")
    @Authority("work:finish")
    public R isFinish(@PathVariable Integer id,@RequestBody Map map){
        if(workService.isfinish(id, map)){
            return R.ok().code(Code.UPDATE_OK);
        }
        return R.error().code(Code.UPDATE_ERR).message("确认失败~请稍后再试");
    }
}
